#include <stdio.h>
int chessboard[12][12]={0};//棋盘
int move[8][2]={{2,1},{1,2},{-1,2},{-2,1},{-2,-1},{-1,-2},{1,-2},{2,-1}};//移动序列
int cnt=1;//判断棋盘
int sum=0;//统计结果
void print(){
    printf("这是第%d组解\n",++sum);
    for(int i=2;i<10;i++){
        for(int j=2;j<10;j++){
            printf("%d ",chessboard[i][j]);
        }
        printf("\n");
    }
}
void Horse(int x,int y){
    for(int i=0;i<8;i++){
        int a=x+move[i][0];//计算a，b
        int b=y+move[i][1];
        if(chessboard[a][b]==0){//可以走过去
            chessboard[a][b]=++cnt;
            if(cnt==64){//一组解已经产生
                print();
            } else{//继续向下调用
                Horse(a,b);
            }
            chessboard[a][b]=0;//回溯
            cnt--;
        }
    }
}
int main(void){
    for (int i = 0; i < 12; i++){
        for (int j = 0; j < 12; j++){
            chessboard[i][j] = -1;
        }
    }
    for (int i = 2; i < 10; i++){
        for (int j = 2; j < 10; j++){
            chessboard[i][j] = 0;
        }
    }
//初始化边界
    for(int i=2;i<10;i++){
        for(int j=2;j<10;j++){

            chessboard[i][j]=1;
            Horse(i,j);
        }
    }
}